From 4c776a32dc059c922e4039ff8f2f4c867e6f5af2 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 19 Nov 2010 13:25:54 +0000 Subject: [PATCH] consolidate custom parameter parsing routines looking for boolean values Have a single function for this, rather than doing the same in half a dozen places. Signed-off-by: Jan Beulich --- xen/arch/x86/cpu/amd.c | 13 +++++++++---- xen/arch/x86/setup.c | 2 +- xen/arch/x86/x86_64/mmconfig-shared.c | 3 +-- xen/common/kernel.c | 26 +++++++++++++++++++++----- xen/drivers/passthrough/iommu.c | 3 +-- xen/drivers/passthrough/vtd/x86/ats.c | 12 +++++++----- xen/include/xen/lib.h | 1 + 7 files changed, 41 insertions(+), 19 deletions(-) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 591a566f57..2fb25c0e70 100644 --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -240,13 +240,18 @@ int cpu_has_amd_erratum(const struct cpuinfo_x86 *cpu, int osvw, ...) * amd_flush_filter={on,off}. Forcibly Enable or disable the TLB flush * filter on AMD 64-bit processors. */ -static int flush_filter_force; -static void flush_filter(char *s) +static int __read_mostly flush_filter_force; +static void __init flush_filter(char *s) { - if (!strcmp(s, "off")) + switch (parse_bool(s)) + { + case 0: flush_filter_force = -1; - if (!strcmp(s, "on")) + break; + case 1: flush_filter_force = 1; + break; + } } custom_param("amd_flush_filter", flush_filter); diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 862900ed88..42e063aa79 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -113,7 +113,7 @@ static void __init parse_acpi_param(char *s) safe_strcpy(acpi_param, s); /* Interpret the parameter for use within Xen. */ - if ( !strcmp(s, "off") ) + if ( !parse_bool(s) ) { disable_acpi(); } diff --git a/xen/arch/x86/x86_64/mmconfig-shared.c b/xen/arch/x86/x86_64/mmconfig-shared.c index abc851757f..f1d790ec9e 100644 --- a/xen/arch/x86/x86_64/mmconfig-shared.c +++ b/xen/arch/x86/x86_64/mmconfig-shared.c @@ -37,8 +37,7 @@ static void __init parse_mmcfg(char *s) if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + if ( !parse_bool(s) ) pci_probe &= ~PCI_PROBE_MMCONF; else if ( !strcmp(s, "amd_fam10") || !strcmp(s, "amd-fam10") ) pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF; diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 96a55318f2..0bc954c1aa 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -26,7 +26,7 @@ int tainted; xen_commandline_t saved_cmdline; -void cmdline_parse(char *cmdline) +void __init cmdline_parse(char *cmdline) { char opt[100], *optval, *optkey, *q; const char *p = cmdline; @@ -83,10 +83,7 @@ void cmdline_parse(char *cmdline) break; case OPT_BOOL: case OPT_INVBOOL: - if ( !strcmp("no", optval) || - !strcmp("off", optval) || - !strcmp("false", optval) || - !strcmp("0", optval) ) + if ( !parse_bool(optval) ) bool_assert = !bool_assert; if ( param->type == OPT_INVBOOL ) bool_assert = !bool_assert; @@ -115,6 +112,25 @@ void cmdline_parse(char *cmdline) } } +int __init parse_bool(const char *s) +{ + if ( !strcmp("no", s) || + !strcmp("off", s) || + !strcmp("false", s) || + !strcmp("disable", s) || + !strcmp("0", s) ) + return 0; + + if ( !strcmp("yes", s) || + !strcmp("on", s) || + !strcmp("true", s) || + !strcmp("enable", s) || + !strcmp("1", s) ) + return 1; + + return -1; +} + /** * print_tainted - return a string to represent the kernel taint state. * diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 57f0daa376..65c672a1e1 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -59,8 +59,7 @@ static void __init parse_iommu_param(char *s) if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + if ( !parse_bool(s) ) iommu_enabled = 0; else if ( !strcmp(s, "force") || !strcmp(s, "required") ) force_iommu = 1; diff --git a/xen/drivers/passthrough/vtd/x86/ats.c b/xen/drivers/passthrough/vtd/x86/ats.c index cf564444cd..1f8efff6bc 100644 --- a/xen/drivers/passthrough/vtd/x86/ats.c +++ b/xen/drivers/passthrough/vtd/x86/ats.c @@ -58,13 +58,15 @@ static void __init parse_ats_param(char *s) if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + switch ( parse_bool(s) ) + { + case 0: ats_enabled = 0; - - if ( !strcmp(s, "on") || !strcmp(s, "yes") || !strcmp(s, "true") || - !strcmp(s, "1") || !strcmp(s, "enable") ) + break; + case 1: ats_enabled = 1; + break; + } s = ss + 1; } while ( ss ); diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h index e09929a604..7e25cb5a29 100644 --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -57,6 +57,7 @@ do { \ struct domain; void cmdline_parse(char *cmdline); +int parse_bool(const char *s); /*#define DEBUG_TRACE_DUMP*/ #ifdef DEBUG_TRACE_DUMP -- 2.30.2